#if _MSC_VER
 #pragma once
#endif // _MSC_VER

#ifndef __HERZELEID_SHADERSWAPSET_INCLUDED__
 #define __HERZELEID_SHADERSWAPSET_INCLUDED__
 #include "HerzeleidRendererModelCore.hxx"
 #include "HerzeleidRendererShading.hxx"

//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererShadingNamespaceBegin struct PipelineShaderSwapSet
{
	typedef HerzeleidRendererResourcesNamespaceImpl::ShaderResourceView ShaderResourceView;
	typedef HerzeleidRendererResourcesNamespaceImpl::SamplerState SamplerState;
	typedef HerzeleidRendererResourcesNamespaceImpl::Buffer Buffer;
	TinyTypeDecl( ShaderResourceView );
	TinyTypeDecl( SamplerState );
	TinyTypeDecl( Buffer );

	BufferPtr ConstantBufferArray[HERZELEID_CBUFFER_NUM_SLOTS]; // Constant buffers
	SamplerStatePtr SamplerStateArray[HERZELEID_SAMPLER_NUM_SLOTS]; // Samplers
	ShaderResourceViewPtr ShaderResourceViewArray[HERZELEID_SRV_NUM_SLOTS]; // Shader resources (textures, buffers etc)

	PipelineShaderSwapSet();
	Void ReleaseAll();
	Void ClearAll();
	
} HerzeleidRendererShadingNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererShadingNamespaceBegin struct ComputeShaderSwapSet : 
	public PipelineShaderSwapSet
{
	typedef HerzeleidRendererResourcesNamespaceImpl::UnorderedAccessView UnorderedAccessView;
	TinyTypeDecl( UnorderedAccessView );

	UnorderedAccessViewPtr UnorderedAccessViewArray[HERZELEID_UAV_NUM_SLOTS]; // UAVs
	UInt32 UnorderedAccessViewInitialCountArray[HERZELEID_UAV_NUM_SLOTS]; // UAV initial counts

	ComputeShaderSwapSet();
	Void ReleaseAll();
	Void ClearAll();
	
} HerzeleidRendererShadingNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////

#endif